//
//  JKSelectorPictureViewController.swift
//  JKSelectorPicture
//
//  Created by 王冲 on 2018/1/28.
//  Copyright © 2018年 希爱欧科技有限公司. All rights reserved.
//

import UIKit

private let JKSelectorPictureReuseIdentifier = "JKSelectorPictureReuseIdentifier"
class JKSelectorPictureViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = UIColor.white
        
        setUI()
    }
    
    func setUI(){
        
        // 1.添加子控件
        view.addSubview(collectionView)
        
        // 2.布局子控件
        /**
         translatesAutoresizingMaskIntoConstraints属性和autolayout有关
         如果你定义的view想用autolayout，就将translatesAutoresizingMaskIntoConstraints设为false，如果你使用的不是autolayout，就将translatesAutoresizingMaskIntoConstraints设为true
         */
        collectionView.translatesAutoresizingMaskIntoConstraints = false
        
        var cons = [NSLayoutConstraint]()
        cons += NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[collectionView]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["collectionView":collectionView])
        cons += NSLayoutConstraint.constraints(withVisualFormat: "V:|-20-[collectionView]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["collectionView":collectionView])
        view.addConstraints(cons)
    }
    
    // MARK: collectionView的创建
    lazy var collectionView: UICollectionView = {
        
        let clv = UICollectionView(frame: CGRect.zero, collectionViewLayout: JKSelectorPictureFlowLayout())
        clv.register(JKSelectorPictureCell.self, forCellWithReuseIdentifier: JKSelectorPictureReuseIdentifier)
        clv.backgroundColor = UIColor.white
        clv.dataSource = self
        clv.delegate = self
        return clv
    }()
    // MARK: 存放图片的数组
    private lazy var pictureImages = [UIImage]()
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
}

extension JKSelectorPictureViewController:UICollectionViewDelegate,UICollectionViewDataSource,JKSelectorPictureCellDelegate,UINavigationControllerDelegate, UIImagePickerControllerDelegate{
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        
        return pictureImages.count + 1
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: JKSelectorPictureReuseIdentifier, for: indexPath) as! JKSelectorPictureCell
        cell.JKPhotoCellDelegate = self as JKSelectorPictureCellDelegate
        
        cell.image = (pictureImages.count == indexPath.item) ? nil : pictureImages[indexPath.item]
        
        return cell
        
    }
    
    // MARK: 添加图片
    func photoDidAddSelector(cell: JKSelectorPictureCell) {
        
        /*
         case photoLibrary 照片库(所有的照片，拍照&用 iTunes & iPhoto `同步`的照片 - 不能删除)
         case camera  相机
         case savedPhotosAlbum 相册 (自己拍照保存的, 可以随便删除)
         */
        // 1.判断能否打开照片库
        if !UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {
            
            print("不能打开相册")
            return
        }
        // 2.创建图片选择器
        /**
         设置允许用户编辑选中的图片
         开发中如果需要上传头像, 那么请让用户编辑之后再上传
         这样可以得到一张正方形的图片, 以便于后期处理(圆形)
         vc.allowsEditing = true
         */
        //初始化图片控制器
        let picker = UIImagePickerController()
        // 设置转场动画类型
        //picker.modalPresentationStyle = UIModalPresentationStyle.overFullScreen
        //设置代理
        picker.delegate = self
        //指定图片控制器类型
        picker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        //设置是否允许编辑
        picker.allowsEditing = true
        //弹出控制器，显示界面
        present(picker, animated: true, completion: nil)
        print("添加图片")
        
    }
    // MARK: 删除图片
    func photoDidDeleteSelector(cell: JKSelectorPictureCell) {
        
        print("删除图片")
        // 1.从数组中移除"当前点击"的图片
        let indexPath = collectionView.indexPath(for: cell)
        pictureImages.remove(at: (indexPath?.item)!)
        // 2.刷新表格
        collectionView.reloadData()
    }
    
    /**
     选中相片之后调用
     :param: picker      促发事件的控制器
     :param: info[UIImagePickerControllerEditedImage] as! UIImage       当前选中的图片
     :param: info 编辑之后的图片
     */
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        
        print("info=\(info)")
        
        /*
         注意: 一般情况下,只要涉及到从相册中获取图片的功能, 都需要处理内存
         一般情况下一个应用程序启动会占用20M左右的内存, 当内存飙升到500M左右的时候系统就会发送内存警告, 此时就需要释放内存 , 否则就会闪退
         只要内存释放到100M左右, 那么系统就不会闪退我们的应用程序
         也就是说一个应用程序占用的内存20~100时是比较安全的内容范围
         */
        //获取编辑后的图片
        let image = info[UIImagePickerControllerEditedImage] as! UIImage
        
        /*
         注意: 1.如果是通过JPEG来压缩图片, 图片压缩之后是不保真的
         2.苹果官方不推荐我们使用JPG图片,因为现实JPG图片的时候解压缩非常消耗性能
         两种压缩方式
         let data1 = UIImageJPEGRepresentation(image, 1.0)
         data1?.writeToFile("/Users/xiaomage/Desktop/1.jpg", atomically: true)
         let data2 = UIImageJPEGRepresentation(image, 0.1)
         data2?.writeToFile("/Users/xiaomage/Desktop/2.jpg", atomically: true)
         */
        
        let newImage = image.imageWithScale(width: 300)
        // 1.将当前选中的图片添加到数组中
        pictureImages.append(newImage)
        print("图片的数量=\(pictureImages.count)")
        collectionView.reloadData()
        // 注意: 如果实现了该方法, 需要我们自己关闭图片选择器
        picker.dismiss(animated: true, completion: nil)
        
    }
    
}



